跳到主要内容

1.3-docker 私有仓库

Create by fall on 09 May 2023
Recently revised in 18 Jul 2023

私有仓库

搭建私有仓库

Docker Registry 是一个无状态,高度可扩展的服务器端应用程序,它存储并允许您分发 Docker 映像;我们通过 run 命令启动

docker run -d -p 5000:5000 -v $PWD:/var/lib/registry --restart=always --name registry registry:2

Registry 服务默认将上传的镜像保存在容器的/var/lib/registry,我们可以将服务器本地的文件夹挂载到该目录,即可实现保存镜像;通过以下 curl 我们可以查看服务器是否启动,以及服务器上的镜像。

curl http://192.168.0.1:5000/v2/_catalog
# 返回数据:{"repositories":[]}

服务器推送镜像到仓库默认使用的是 https,但是我们在企业内部使用,这里就不加 https;需要在客户端配置可信的仓库地址:

  • linux 的配置文件地址为:/etc/docker/daemon.json
  • windows 在 docker 应用中添加下面的内容即可
{
// ... 其它配置
"insecure-registries":[
"192.168.0.1:500" // 对应的地址
]
}

向仓库内推送镜像

# 打上标签
docker tag ubuntu:18.04 192.168.0.1:5000/my-ubuntu:latest
# 推送镜像
docker push 192.168.0.1:5000/my-ubuntu:latest

确认镜像存在

curl http://192.168.0.1:5000/v2/_catalog
# 返回数据:{"repositories":["my-ubuntu"]}

需要认证的仓库

将原有容器删除,创建一个保存账号密码的文件:

mkdir -p ~/auth && cd ~/auth
docker run --rm --entrypoint htpasswd httpd:alpine -Bbn username password > ./htpasswd
$ docker run -d -p 5000:5000
-v $PWD:/var/lib/registry \
-v ~/auth:/auth \
-e "REGISTRY_AUTH=htpasswd" \
-e "REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm" \
-e REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd \
--restart always --name registry registry:2

此时再拉去和推送会提示 no basic auth credentials,我们需要先进行登录操作:

# 登录
$ docker login 192.168.0.1:5000
# 退出登录
$ docker logout 192.168.0.1:5000

# windows客户端运行添加winpty
$ winpty docker login 192.168.0.1:5000